function compose(...funcs){
    if(funcs.length === 0){
        return args => args
    }
    if(funcs.length === 1){
        return funcs[0]
    }
    return function(args){
        for(let i = funcs.length-1;i>=0;i--){
            args = funcs[i](args)
        }
        return args
    }
}
export default compose




/**
 * 两个阶段
 * 1.包装获取改造后的dispatch，从内往外
 * 2.派发执行动作，从外往内
 */
// let promise = (next)=>action=>{
//     console.log('promise');
//     next(action);
// };
// let thunk = (next)=>action=>{ //next = action=>{console.log('logger') next(action);};
//     console.log('thunk');
//     next(action);
// };
// let logger = (next)=>action=>{ //next = dispatch = ()=>{console.log('原始的dispatch')}
//     console.log('logger');
//     next(action);
// };

// let chain = [promise,thunk,logger]; 
// let composed = compose(...chain)
// let dispatch = ()=>{
//     console.log('原始的dispatch');
// }
// let newDispatch = composed(dispatch);
// newDispatch({type:"add"});



// function add1(str){
//     return '1'+str;
// }
// function add2(str){
//     return '2'+str;
// }
// function add3(str){
//     return '3'+str;
// }
// function compose(...funcs){
//     if(funcs.length === 0){
//         return args => args
//     }
//     if(funcs.length === 1){
//         return funcs[0]
//     }
//     return funcs.reduce((a,b)=>(...args)=>a(b(...args)));
// }
// let fn = compose(add3,add2,add1);
// let result = fn('zhufeng');
// console.log(result);
// export default compose

// 第一次执行 a = add3 b = add2  返回 (...args)=>add3(add2(...args))
// 第二次执行 a = (...args)=>add3(add2(...args)) b = add1  返回  (...args)=>add3(add2(add1(...args))
